#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int total = 10;

int main()
{
    pid_t ret = fork();
    if(ret == -1)
    {
        printf("创建进程错误\n");
        return 1;
    }
    else if(ret == 0)
    {
        while(1)
        {
             printf("子进程->total:%d,&total:%p,pid:%d,ppid:%d\n", total, &total,getpid(), getppid());
             total++;
             sleep(1);
        }
    }
    else
    {
        while(1)
        {
             printf("父进程->total:%d,&total:%p,pid:%d,ppid:%d\n", total, &total,getpid(), getppid());
             sleep(1);
        }
    }
    return 0;
}


//#include <stdio.h>
//#include <unistd.h>
//#include <stdlib.h>
//
//int g_unval;
//int g_val = 100;
//
//int main(int argc, char *argv[], char *env[])
//{
//    const char *str = "helloworld";
//    printf("code addr: %p\n", main);
//    printf("init global addr: %p\n", &g_val);
//    printf("uninit global addr: %p\n", &g_unval);
//
//    static int test = 10;
//    char *heap_mem = (char*)malloc(10);
//    char *heap_mem1 = (char*)malloc(10);
//    char *heap_mem2 = (char*)malloc(10);
//    char *heap_mem3 = (char*)malloc(10);
//    printf("heap addr: %p\n", heap_mem); //heap_mem(0), &heap_mem(1)
//    printf("heap addr: %p\n", heap_mem1); //heap_mem(0), &heap_mem(1)
//    printf("heap addr: %p\n", heap_mem2); //heap_mem(0), &heap_mem(1)
//    printf("heap addr: %p\n", heap_mem3); //heap_mem(0), &heap_mem(1)
//
//    printf("test static addr: %p\n", &test); //heap_mem(0), &heap_mem(1)
//    printf("stack addr: %p\n", &heap_mem); //heap_mem(0), &heap_mem(1)
//    printf("stack addr: %p\n", &heap_mem1); //heap_mem(0), &heap_mem(1)
//    printf("stack addr: %p\n", &heap_mem2); //heap_mem(0), &heap_mem(1)
//    printf("stack addr: %p\n", &heap_mem3); //heap_mem(0), &heap_mem(1)
//
//    printf("read only string addr: %p\n", str);
//    for(int i = 0 ;i < argc; i++)
//    {
//        printf("argv[%d]: %p\n", i, argv[i]);
//    }
//    for(int i = 0; env[i]; i++)
//    {
//        printf("env[%d]: %p\n", i, env[i]);
//    }
//
//    return 0;
//}


//#include <stdio.h>
//#include <string.h>
//#include <stdlib.h>
//#include <unistd.h>
//#include <sys/types.h>
//
//extern char** environ;
//
////main函数的参数
////参数最多有3个
////int main(int argc,char* argv[],char* env[])
//
//int main(int argc,char* argv[])
//{
//    (void)argc;
//    (void)argv;
//    
//    if(fork() == 0)
//    {
//        for(int i = 0;environ[i];i++)
//        {
//            printf("environ[%d]->%s\n", i, environ[i]);
//        }
//    }
//    sleep(3);
//    //const char* find = getenv("LOGNAME");
//    //if(find == NULL)
//    //{
//    //    printf("没有找到\n");
//    //    return 1;
//    //}
//
//    //if(strcmp(find,"mihayou") == 0)
//    //{
//    //    printf("程序正常执行\n");
//    //}
//    //else
//    //{
//    //    printf("程序错误执行...no mihayou\n");
//    //}
//
//    //for(int i = 0;environ[i];i++)
//    //{
//    //    printf("environ[%d]->%s\n", i, environ[i]);
//    //}
//
//    //for(int i = 0;env[i];i++)
//    //{
//    //    printf("env[%d]->%s\n", i,env[i]);
//    //}
//    
//    //if(argc != 2)
//    //{
//    //    printf("argv: [-a|-b|-c]->%s\n", argv[0]);
//    //    return 0;
//    //}
//
//    //const char* str = argv[1];
//    //if(strcmp(str,"-a") == 0)
//    //{
//    //    printf("这是功能一\n");
//    //}
//    //else if(strcmp(str,"-b") == 0)
//    //{
//    //    printf("这是功能二\n");
//    //}
//    //else if(strcmp(str,"-c") == 0)
//    //{
//    //    printf("这是功能三\n");
//    //}
//    //else
//    //{
//    //    printf("argv: [-a|-b|-c]->%s\n", argv[0]);
//    //    return 0;
//    //}
//
//
//
//    //for(int i = 0;i < argc;i++)
//    //{
//    //    printf("argv[%d]:%s\n", i, argv[i]);
//    //}
//    return 0;
//}
